<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Word2vec &amp; Node2vec | Hexo</title>
  <meta name="keywords" content="">
  <meta name="description" content="Word2vec &amp; Node2vec | Hexo">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="description" content="第二章 线性表线性表：表内数据类型相同，有限序列 本章将以总结的形式展现： 2.1 顺序表与链式表的区别     顺序表 链式表     存取 随机存取 顺序存取   结构 顺序存储（连续） 随机存储（不连续）   空间分配 静态存储（可以动态分配） 动态存储   操作 查找 O(1) ,插入和删除O（n） 查找 O(n) ,插入和删除O（1）   缺点 插入删除不便，长度不可以改变 查找速度慢，">
<meta property="og:type" content="article">
<meta property="og:title" content="数据结构">
<meta property="og:url" content="http://yoursite.com/2021/03/12/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/index.html">
<meta property="og:site_name" content="Hexo">
<meta property="og:description" content="第二章 线性表线性表：表内数据类型相同，有限序列 本章将以总结的形式展现： 2.1 顺序表与链式表的区别     顺序表 链式表     存取 随机存取 顺序存取   结构 顺序存储（连续） 随机存储（不连续）   空间分配 静态存储（可以动态分配） 动态存储   操作 查找 O(1) ,插入和删除O（n） 查找 O(n) ,插入和删除O（1）   缺点 插入删除不便，长度不可以改变 查找速度慢，">
<meta property="og:locale" content="en_US">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/23/171951-630686.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/23/171844-136893.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/19/203103-111988.jpeg">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/23/171839-101678.jpeg">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/23/200119-510473.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202103/05/113954-515448.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/23/203146-263519.jpeg">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/19/153239-688589.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/19/153248-836462.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/19/153259-101399.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202103/11/113055-306258.jpeg">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/19/151817-474283.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/02/103950-168345.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/02/105245-140913.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/19/153313-134836.png">
<meta property="article:published_time" content="2021-03-11T16:00:00.000Z">
<meta property="article:modified_time" content="2021-03-11T07:19:09.038Z">
<meta property="article:author" content="MOLU">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/23/171951-630686.png">


<link rel="icon" href="/img/avatar.jpg">

<link href="/css/style.css?v=1.1.0" rel="stylesheet">

<link href="/css/hl_theme/github.css?v=1.1.0" rel="stylesheet">

<link href="//cdn.jsdelivr.net/npm/animate.css@4.1.0/animate.min.css" rel="stylesheet">

<script src="//cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js"></script>
<script src="/js/titleTip.js?v=1.1.0" ></script>

<script src="//cdn.jsdelivr.net/npm/highlightjs@9.16.2/highlight.pack.min.js"></script>
<script>
    hljs.initHighlightingOnLoad();
</script>

<script src="//cdn.jsdelivr.net/npm/nprogress@0.2.0/nprogress.min.js"></script>



<script src="//cdn.jsdelivr.net/npm/jquery.cookie@1.4.1/jquery.cookie.min.js" ></script>

<script src="/js/iconfont.js?v=1.1.0" ></script>

<meta name="generator" content="Hexo 5.0.0"></head>
<div style="display: none">
  <input class="theme_disqus_on" value="false">
  <input class="theme_preload_comment" value="">
  <input class="theme_blog_path" value="">
  <input id="theme_shortcut" value="true" />
</div>


<body>
<aside class="nav">
    <div class="nav-left">
        <a href="/" class="avatar_target">
    <img class="avatar" src="/img/avatar.jpg" />
</a>
<div class="author">
    <span>MOLU</span>
</div>

<div class="icon">
    
        
        <a title="rss" href="/atom.xml" target="_blank">
            
                <i class="iconfont icon-rss"></i>
            
        </a>
        
    
        
        <a title="github" href="https://github.com/molu-ggg" target="_blank">
            
                <i class="iconfont icon-github"></i>
            
        </a>
        
    
        
    
        
    
        
        <a title="email" href="mailto:2572876783@qq.com" target="_blank">
            
                <i class="iconfont icon-email"></i>
            
        </a>
        
    
</div>




<ul>
    <li><div class="all active" data-rel="All">All<small>(35)</small></div></li>
    
        
            
            <li><div data-rel="AI论文">AI论文<small>(5)</small></div>
                
            </li>
            
        
    
        
            
            <li><div data-rel="专业知识">专业知识<small>(2)</small></div>
                
            </li>
            
        
    
        
            
            <li><div data-rel="数学">数学<small>(2)</small></div>
                
            </li>
            
        
    
        
            
            <li><div data-rel="机器学习">机器学习<small>(12)</small></div>
                
            </li>
            
        
    
        
            
            <li><div data-rel="经典算法">经典算法<small>(10)</small></div>
                
            </li>
            
        
    
</ul>
<div class="left-bottom">
    <div class="menus">
    
    
    
    
    </div>
    <div><a class="about  hasFriend  site_url"  href="/about">About</a><a style="width: 50%"  class="friends">Friends</a></div>
</div>
<input type="hidden" id="yelog_site_posts_number" value="35">

<div style="display: none">
    <span id="busuanzi_value_site_uv"></span>
    <span id="busuanzi_value_site_pv"></span>
</div>

    </div>
    <div class="nav-right">
        <div class="friends-area">
    <div class="friends-title">
        Links
        <i class="iconfont icon-left"></i>
    </div>
    <div class="friends-content">
        <ul>
            
            <li><a target="_blank" href="http://yelog.org/">叶落阁</a></li>
            
        </ul>
    </div>
</div>
        <div class="title-list">
    <div class="right-top">
        <div id="default-panel">
            <i class="iconfont icon-search" data-title="搜索 快捷键 i"></i>
            <div class="right-title">All</div>
            <i class="iconfont icon-file-tree" data-title="切换到大纲视图 快捷键 w"></i>
        </div>
        <div id="search-panel">
            <i class="iconfont icon-left" data-title="返回"></i>
            <input id="local-search-input" />
            <label class="border-line" for="input"></label>
            <i class="iconfont icon-case-sensitive" data-title="大小写敏感"></i>
            <i class="iconfont icon-tag" data-title="标签"></i>
        </div>
        <div id="outline-panel" style="display: none">
            <div class="right-title">大纲</div>
            <i class="iconfont icon-list" data-title="切换到文章列表"></i>
        </div>
    </div>

    <div class="tags-list">
    <input id="tag-search" />
    <div class="tag-wrapper">
        
            <li class="article-tag-list-item">
                <i class="iconfont icon-tag"></i><a>50</a>
            </li>
        
            <li class="article-tag-list-item">
                <i class="iconfont icon-tag"></i><a>AI</a>
            </li>
        
            <li class="article-tag-list-item">
                <i class="iconfont icon-tag"></i><a>数据结构，最短路径，图</a>
            </li>
        
            <li class="article-tag-list-item">
                <i class="iconfont icon-tag"></i><a>机器学习</a>
            </li>
        
            <li class="article-tag-list-item">
                <i class="iconfont icon-tag"></i><a>相似度计算</a>
            </li>
        
    </div>

</div>

    
    <div id="local-search-result">

    </div>
    
    <nav id="title-list-nav">
        
        <a id="top" class="All 经典算法 "
           href="/2020/07/20/b_leetcode/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="leetcode &amp; 蓝桥">leetcode &amp; 蓝桥</span>
            <span class="post-date" title="2020-07-20 00:00:00">2020/07/20</span>
        </a>
        
        <a id="top" class="All AI论文 "
           href="/2020/07/10/d_GAT/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="GAT">GAT</span>
            <span class="post-date" title="2020-07-10 08:50:20">2020/07/10</span>
        </a>
        
        <a  class="All 专业知识 "
           href="/2021/03/12/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="计算机组成原理">计算机组成原理</span>
            <span class="post-date" title="2021-03-12 00:00:00">2021/03/12</span>
        </a>
        
        <a  class="All 专业知识 "
           href="/2021/03/12/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="数据结构">数据结构</span>
            <span class="post-date" title="2021-03-12 00:00:00">2021/03/12</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2020/12/05/b_%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E4%B8%8E%E8%AE%B0%E5%BF%86%E5%8C%96%E6%90%9C%E7%B4%A2/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="动态规划记忆化">动态规划记忆化</span>
            <span class="post-date" title="2020-12-05 00:00:00">2020/12/05</span>
        </a>
        
        <a  class="All AI论文 "
           href="/2020/07/25/d_300-paperDAT/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="DAT for recommender">DAT for recommender</span>
            <span class="post-date" title="2020-07-25 08:50:20">2020/07/25</span>
        </a>
        
        <a  class="All 数学 "
           href="/2020/07/20/a_%E7%AE%97%E6%B3%95/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="算法总结">算法总结</span>
            <span class="post-date" title="2020-07-20 00:00:00">2020/07/20</span>
        </a>
        
        <a  class="All 数学 "
           href="/2020/07/20/a_%E6%95%B0%E5%AD%A6/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="数学">数学</span>
            <span class="post-date" title="2020-07-20 00:00:00">2020/07/20</span>
        </a>
        
        <a  class="All "
           href="/2020/07/05/%E5%AF%B9%E9%9A%90%E7%A7%98%E7%9A%84%E8%A7%92%E8%90%BD%E7%94%B5%E8%A7%86%E5%89%A7%E7%9A%84%E6%84%9F%E6%82%9F%E4%BB%A5%E5%8F%8A%E8%AE%A4%E8%AF%86/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="对隐秘的角落电视剧的感悟以及认识">对隐秘的角落电视剧的感悟以及认识</span>
            <span class="post-date" title="2020-07-05 00:00:00">2020/07/05</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2020/07/04/a_%E6%A8%A1%E6%9D%BF%E5%BA%93/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="模板库">模板库</span>
            <span class="post-date" title="2020-07-04 08:50:20">2020/07/04</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2020/07/04/a_%E7%99%BE%E5%BA%A6%E6%8A%80%E6%9C%AF%E8%AE%A4%E8%AF%81/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="百度技术认证">百度技术认证</span>
            <span class="post-date" title="2020-07-04 08:50:20">2020/07/04</span>
        </a>
        
        <a  class="All AI论文 "
           href="/2020/07/01/d_GCN%E8%AE%BA%E6%96%87%E8%A7%A3%E8%AF%BB/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="GCN">GCN</span>
            <span class="post-date" title="2020-07-01 08:50:20">2020/07/01</span>
        </a>
        
        <a  class="All AI论文 "
           href="/2020/06/04/d_word2vec_node2vec/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="Word2vec &amp; Node2vec">Word2vec &amp; Node2vec</span>
            <span class="post-date" title="2020-06-04 08:50:20">2020/06/04</span>
        </a>
        
        <a  class="All AI论文 "
           href="/2020/05/05/d_GAN/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="GAN">GAN</span>
            <span class="post-date" title="2020-05-05 08:50:20">2020/05/05</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2020/05/04/d_Deepwalk/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="DEEPWALK">DEEPWALK</span>
            <span class="post-date" title="2020-05-04 08:50:20">2020/05/04</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2020/02/15/b_%E8%B4%AA%E5%BF%83/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="贪心与动态规划">贪心与动态规划</span>
            <span class="post-date" title="2020-02-15 00:00:00">2020/02/15</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2020/02/12/a_2020/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="机器学习零散知识记录">机器学习零散知识记录</span>
            <span class="post-date" title="2020-02-12 00:00:00">2020/02/12</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2020/02/12/b_%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="动态规划——背包问题">动态规划——背包问题</span>
            <span class="post-date" title="2020-02-12 00:00:00">2020/02/12</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2020/02/03/b_%E8%93%9D%E6%A1%A5%E6%9D%AF%E7%BB%83%E4%B9%A0%E9%A2%98/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="蓝桥杯">蓝桥杯</span>
            <span class="post-date" title="2020-02-03 00:00:00">2020/02/03</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2020/01/20/c_%E5%86%B3%E7%AD%96%E6%A0%91/"
           data-tag="50"
           data-author="" >
            <span class="post-title" title="决策树总结">决策树总结</span>
            <span class="post-date" title="2020-01-20 00:00:00">2020/01/20</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2020/01/12/b_%E5%85%A8%E6%8E%92%E5%88%97/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="全排列">全排列</span>
            <span class="post-date" title="2020-01-12 00:00:00">2020/01/12</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2019/12/02/b_%E6%9C%89%E7%A9%B7%E8%87%AA%E5%8A%A8%E6%9C%BA/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="有穷自动机">有穷自动机</span>
            <span class="post-date" title="2019-12-02 00:00:00">2019/12/02</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2019/11/20/b_%E9%94%99%E6%8E%92%E5%85%AC%E5%BC%8F/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="错排公式">错排公式</span>
            <span class="post-date" title="2019-11-20 00:00:00">2019/11/20</span>
        </a>
        
        <a  class="All "
           href="/2019/10/29/a_%E5%BC%97%E6%B4%9B%E4%BC%8A%E5%BE%B7/"
           data-tag="数据结构，最短路径，图"
           data-author="" >
            <span class="post-title" title="最短路径之弗洛伊德算法">最短路径之弗洛伊德算法</span>
            <span class="post-date" title="2019-10-29 00:00:00">2019/10/29</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2019/08/04/c_BPR/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="贝叶斯">贝叶斯</span>
            <span class="post-date" title="2019-08-04 08:50:20">2019/08/04</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2019/08/02/c_matrix/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="矩阵分解与正则化">矩阵分解与正则化</span>
            <span class="post-date" title="2019-08-02 08:25:59">2019/08/02</span>
        </a>
        
        <a  class="All "
           href="/2019/07/28/c_coordination1/"
           data-tag="AI,机器学习,相似度计算"
           data-author="" >
            <span class="post-title" title="协同过滤-上">协同过滤-上</span>
            <span class="post-date" title="2019-07-28 08:25:59">2019/07/28</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2019/07/26/c_cnn/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="cnn">cnn</span>
            <span class="post-date" title="2019-07-26 18:54:51">2019/07/26</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2019/07/22/c_coordination2/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="协同过滤—下">协同过滤—下</span>
            <span class="post-date" title="2019-07-22 18:54:26">2019/07/22</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2019/07/22/c_kmeans/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="K-means算法">K-means算法</span>
            <span class="post-date" title="2019-07-22 18:53:07">2019/07/22</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2019/07/21/c_nerve2/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="神经网络-下">神经网络-下</span>
            <span class="post-date" title="2019-07-21 11:37:18">2019/07/21</span>
        </a>
        
        <a  class="All "
           href="/2019/07/20/c_nerve1/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="神经网络—上">神经网络—上</span>
            <span class="post-date" title="2019-07-20 17:29:10">2019/07/20</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2019/06/22/c_gradient/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="线性回归与梯度下降算法">线性回归与梯度下降算法</span>
            <span class="post-date" title="2019-06-22 08:26:36">2019/06/22</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2019/06/19/c_flyback/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="线性回归">线性回归</span>
            <span class="post-date" title="2019-06-19 00:00:00">2019/06/19</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2019/05/20/b_%E8%A7%86%E9%A2%91%E7%BB%8F%E5%85%B8%E7%AE%97%E6%B3%95/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="简单入门算法">简单入门算法</span>
            <span class="post-date" title="2019-05-20 00:00:00">2019/05/20</span>
        </a>
        
        <div id="no-item-tips">

        </div>
    </nav>
    <div id="outline-list">
    </div>
</div>
    </div>
    <div class="hide-list">
        <div class="semicircle" data-title="切换全屏 快捷键 s">
            <div class="brackets first"><</div>
            <div class="brackets">&gt;</div>
        </div>
    </div>
</aside>
<div id="post">
    <div class="pjax">
        <article id="post-d_word2vec_node2vec" class="article article-type-post" itemscope itemprop="blogPost">
    
        <h1 class="article-title">Word2vec &amp; Node2vec</h1>
    
    <div class="article-meta">
        
        
        
        <span class="book">
            <i class="iconfont icon-category"></i>
            
            
            <a  data-rel="AI论文">AI论文</a>
            
        </span>
        
        
    </div>
    <div class="article-meta">
        
            Created At : <time class="date" title='Updated At: 2020-08-09 14:28:07'>2020-06-04 08:50</time>
        
    </div>
    <div class="article-meta">
        
        
        <span id="busuanzi_container_page_pv">
            Views 👀 :<span id="busuanzi_value_page_pv">
                <span class="count-comment">
                    <span class="spinner">
                      <div class="cube1"></div>
                      <div class="cube2"></div>
                    </span>
                </span>
            </span>
        </span>
        
        
    </div>
    
    <div class="toc-ref">
    
        <ol class="toc"><li class="toc-item toc-level-1"><a class="toc-link" href="#Word2vec-%E4%B9%8B-Skip-Gram-%E6%A8%A1%E5%9E%8B"><span class="toc-text">Word2vec 之 Skip-Gram 模型</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#1-Word2Vec"><span class="toc-text">1.Word2Vec</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#2-Embeddings%EF%BC%9F"><span class="toc-text">2.Embeddings？</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#3-skip-gram-%E6%A8%A1%E5%9E%8B"><span class="toc-text">3. skip-gram 模型</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#3-1-skip-gram-%E6%A8%A1%E5%9E%8B%E5%8F%AF%E8%A7%86%E5%8C%96%EF%BC%9A"><span class="toc-text">3.1 skip-gram 模型可视化：</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#3-2-one-hot-%E7%BC%96%E7%A0%81"><span class="toc-text">3.2 one-hot 编码</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#3-2-Lookup-Table%EF%BC%88%E6%9F%A5%E8%A1%A8%EF%BC%89"><span class="toc-text">3.2 Lookup Table（查表）</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#3-3-%E6%A8%A1%E5%9E%8B%E5%BB%BA%E7%AB%8B%E4%B8%8E%E5%8F%82%E6%95%B0%E6%9B%B4%E6%96%B0"><span class="toc-text">3.3 模型建立与参数更新</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#3-4-%E6%AD%A5%E9%AA%A4%E6%80%BB%E7%BB%93"><span class="toc-text">3.4 步骤总结</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#4-%E7%9B%B4%E8%A7%89%E4%B8%8A%E7%9A%84%E7%90%86%E8%A7%A3"><span class="toc-text">4. 直觉上的理解</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#5-python%E5%AE%9E%E7%8E%B0"><span class="toc-text">5.python实现</span></a></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#node2vec"><span class="toc-text">node2vec</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E9%87%87%E6%A0%B7%E7%AD%96%E7%95%A5"><span class="toc-text">采样策略</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%BC%98%E5%8C%96%E7%9B%AE%E6%A0%87%EF%BC%9A"><span class="toc-text">优化目标：</span></a></li></ol></li></ol>
    
<style>
    .left-col .switch-btn,
    .left-col .switch-area {
        display: none;
    }
    .toc-level-4 i,
    .toc-level-4 ol {
        display: none !important;
    }
</style>
</div>
    
    <div class="article-entry" itemprop="articleBody">
      
        <h1 id="Word2vec-之-Skip-Gram-模型"><a href="#Word2vec-之-Skip-Gram-模型" class="headerlink" title="Word2vec 之 Skip-Gram 模型"></a>Word2vec 之 Skip-Gram 模型</h1><p>转载<a target="_blank" rel="noopener" href="https://me.csdn.net/qq_24003917">qq_24003917</a> 最后发布于2018-05-25 09:40:20 </p>
<p>展开</p>
<p>这次的分享主要是对Word2Vec模型的两篇英文文档的翻译、理解和整合，这两篇英文文档都是介绍Word2Vec中的Skip-Gram模型。下一篇专栏文章将会用TensorFlow实现基础版Word2Vec的skip-gram模型，所以本篇文章先做一个理论铺垫。</p>
<p>原文英文文档请参考链接：</p>
<blockquote>
<p>- Word2Vec Tutorial - The Skip-Gram Model</p>
<p><a target="_blank" rel="noopener" href="http://t.cn/Rc5RfJ2">http://t.cn/Rc5RfJ2</a></p>
<p>- Word2Vec (Part 1): NLP With Deep Learning with Tensorflow (Skip-gram)</p>
<p><a target="_blank" rel="noopener" href="http://t.cn/RoVEiUB">http://t.cn/RoVEiUB</a></p>
</blockquote>
<h2 id="1-Word2Vec"><a href="#1-Word2Vec" class="headerlink" title="1.Word2Vec"></a><strong>1.Word2Vec</strong></h2><p>Word2vec，是一群用来产生词向量的相关模型。这些模型为浅而双层的<a target="_blank" rel="noopener" href="https://baike.baidu.com/item/神经网络/16600562">神经网络</a>，用来训练以重新建构语言学之词文本。<a target="_blank" rel="noopener" href="https://baike.baidu.com/item/网络/143243">网络</a>以词表现，并且需猜测相邻位置的输入词，在word2vec中词袋模型假设下，词的顺序是不重要的。训练完成之后，word2vec模型可用来映射每个词到一个向量，可用来表示词对词之间的关系，该向量为神经网络之隐藏层。</p>
<p>Word2Vec是从大量文本语料中以无监督的方式学习语义知识的一种模型，它被大量地用在自然语言处理（NLP）中。那么它是如何帮助我们做自然语言处理呢？<strong>Word2Vec通过学习文本来用词向量的方式表征词的语义信息，即通过一个嵌入空间使得语义上相似的单词在该空间内距离很近</strong>。</p>
<h2 id="2-Embeddings？"><a href="#2-Embeddings？" class="headerlink" title="2.Embeddings？"></a>2.Embeddings？</h2><p>Embedding其实就是一个映射，将单词从原先所属的空间映射到新的多维空间中，也就是把原先词所在空间嵌入到一个新的空间中去。</p>
<p><a target="_blank" rel="noopener" href="https://zhuanlan.zhihu.com/p/46016518">https://zhuanlan.zhihu.com/p/46016518</a></p>
<p>Embedding 是一个将离散变量转为连续向量表示的一个方式。在神经网络中，embedding 是非常有用的，因为它不光可以减少离散变量的空间维数，同时还可以有意义的表示该变量。</p>
<p>我们可以总结一下，embedding 有以下 3 个主要目的：</p>
<ol>
<li>在 embedding 空间中查找最近邻，这可以很好的用于根据用户的兴趣来进行推荐。</li>
<li>作为监督性学习任务的输入。</li>
<li>用于可视化不同离散变量之间的关系。</li>
</ol>
<p><strong>浅显易懂的理解方法：</strong></p>
<p>原本的下面的及几个词语，one-hot编码，但是one-hot 编码长度太长，于是我们embedding :</p>
<p>一个将离散变量转为连续向量表示,减少离散变量的空间维数,更可以使得相关的向量</p>
<p>o  词映射到低维连续向量(如图) </p>
<p>cat: (-0.065, -0.035,  0.019, -0.026, 0.085,…)</p>
<p>dog: (-0.019, -0.076,  0.044, 0.021,0.095,…)</p>
<p>table: (0.027,  0.013,  0.006, -0.023, 0.014, …)</p>
<p>o  相似词映射到相似方向 — 语义相似性被编码了</p>
<p>o  Cosine相似度衡量方向</p>
<p><img src="https://gitee.com/moluggg/image/raw/master/img/202008/04/105706-647977.png" alt="img"></p>
<p>我们从直观角度上来理解一下，cat这个单词和kitten属于语义上很相近的词，而dog和kitten则不是那么相近，iphone这个单词和kitten的语义就差的更远了。通过对词汇表中单词进行这种数值表示方式的学习（也就是将单词转换为词向量），能够让我们基于这样的数值进行向量化的操作从而得到一些有趣的结论。比如说，如果我们对词向量kitten、cat以及dog执行这样的操作：<strong>kitten - cat + dog，那么最终得到的嵌入向量（embedded vector）将与puppy（幼犬）这个词向量十分相近。</strong></p>
<h2 id="3-skip-gram-模型"><a href="#3-skip-gram-模型" class="headerlink" title="3. skip-gram 模型"></a><strong>3. skip-gram 模型</strong></h2><p>Word2Vec模型中，主要有Skip-Gram和CBOW两种模型，从直观上理解，<strong>Skip-Gram是给定input word来预测上下文。</strong>而CBOW是给定上下文，来预测input word。本篇文章仅讲解Skip-Gram模型。</p>
<p><img src="https://gitee.com/moluggg/image/raw/master/img/202008/04/105057-755439.jpeg" alt="一文详解 Word2vec 之 Skip-Gram 模型（结构篇）"></p>
<p>Skip-Gram模型的基础形式非常简单，为了更清楚地解释模型，我们先从最一般的基础模型来看Word2Vec（下文中所有的Word2Vec都是指Skip-Gram模型）。</p>
<p>Word2Vec模型实际上分为了两个部分，<strong>第一部分为建立模型，第二部分是通过模型获取嵌入词向量</strong>。Word2Vec的整个建模过程实际上与自编码器（auto-encoder）的思想很相似，即先基于训练数据构建一个神经网络，当这个模型训练好以后，我们并不会用这个训练好的模型处理新的任务，我们真正需要的是这个模型通过训练数据所学得的参数，例如隐层的权重矩阵——后面我们将会看到这些权重在Word2Vec中实际上就是我们试图去学习的“word vectors”。基于训练数据建模的过程，我们给它一个名字叫“Fake Task”，意味着建模并不是我们最终的目的。</p>
<blockquote>
<p>上面提到的这种方法实际上会在无监督特征学习（unsupervised feature learning）中见到，最常见的就是自编码器（auto-encoder）：通过在隐层将输入进行编码压缩，继而在输出层将数据解码恢复初始状态，训练完成后，我们会将输出层“砍掉”，仅保留隐层。</p>
</blockquote>
<h3 id="3-1-skip-gram-模型可视化："><a href="#3-1-skip-gram-模型可视化：" class="headerlink" title="3.1 skip-gram 模型可视化："></a><strong>3.1 skip-gram 模型可视化：</strong></h3><p><img src="https://gitee.com/moluggg/image/raw/master/img/202008/04/112308-360404.png" alt="在这里插入图片描述"></p>
<p>我们在上面提到，训练模型的真正目的是获得模型基于训练数据学得的隐层权重。为了得到这些权重，我们首先要构建一个完整的神经网络作为我们的“Fake Task”，后面再返回来看通过“Fake Task”我们如何间接地得到这些词向量。</p>
<p>目标： 预测上下文词汇</p>
<p>中间历程： </p>
<h3 id="3-2-one-hot-编码"><a href="#3-2-one-hot-编码" class="headerlink" title="3.2 one-hot 编码"></a>3.2 one-hot 编码</h3><p>简单易懂容易操作的编码方式，但是唯独高，无法计算词之间的相似度。</p>
<p>比如我这里的文本序列为：[“the”，“man”，“loves”，“his”，“son”]，那么可以进行如下编码了。</p>
<ul>
<li>the ：[1,0,0,0,0]</li>
<li>man：[0,1,0,0,0]</li>
<li>loves：[0,0,1,0,0]</li>
<li>his：[0,0,0,1,0]</li>
<li>son：[0,0,0,0,1]</li>
</ul>
<h3 id="3-2-Lookup-Table（查表）"><a href="#3-2-Lookup-Table（查表）" class="headerlink" title="3.2 Lookup Table（查表）"></a>3.2 Lookup Table（查表）</h3><p>我们需要将单词的one -hot 编码映射到一个n维的向量空间去。下图表示的是将5维one -hot 映射到 三维的词向量空间去。</p>
<p><img src="https://gitee.com/moluggg/image/raw/master/img/202008/04/113127-532027.png" alt="在这里插入图片描述"></p>
<p>但实际单词维数很高，我们一般映射到300维的词向量空间去：</p>
<p>查表如下：</p>
<p><img src="E:\typora图片\image-20200804113835943.png" alt="image-20200804113835943"></p>
<p>这个10000*300 的矩阵，就是我们需要训练调整的参数矩阵</p>
<p><strong>那么这个模型是如何学习的呢？</strong></p>
<h3 id="3-3-模型建立与参数更新"><a href="#3-3-模型建立与参数更新" class="headerlink" title="3.3 模型建立与参数更新"></a>3.3 模型建立与参数更新</h3><ul>
<li>举个例子<ul>
<li>假设文本序列是“the”“man”“loves”“his”“son”。</li>
<li>以“loves”作为中心词，设背景窗口大小为2。如图所示，跳字模型所关心的是，给定中心词“loves”，生成与它距离不超过2个词的背景词“the”“man”“his”“son”的条件概率，即</li>
</ul>
</li>
</ul>
<p>$P(“the”,“man”,“his”,“son”∣“loves”)$.</p>
<ul>
<li>假设给定中心词的情况下，背景词的生成是相互独立的，那么上式可以改写成</li>
</ul>
<p>$P(“the”∣“loves”)⋅<em>P(“man”∣“loves”)⋅</em>P(“his”∣“loves”)⋅*P(“son”∣“loves”))$<br><img src="https://gitee.com/moluggg/image/raw/master/img/202008/04/114449-820488.png" alt="在这里插入图片描述"></p>
<p><strong>那么如何求条件概率呢？</strong></p>
<p>在跳字模型中，每个词被表示成<strong>两个d维向量</strong>，用来计算条件概率。</p>
<p>①假设这个词在词典中索引为i，当它为中心词时向量表示为$\boldsymbol{v}_i\in\mathbb{R}^d$，而为背景词时向量表示为$\boldsymbol{u}_i\in\mathbb{R}^d$<em>。</em></p>
<p><em>②设中心词wc在词典中索引为c，背景词wo</em>在词典中索引为o，给定中心词生成背景词的条件概率可以通过对向量内积做softmax运算而得到：</p>
<script type="math/tex; mode=display">
P\left(w_{o} \mid w_{c}\right)=\frac{\exp \left(\boldsymbol{u}_{o}^{\top} \boldsymbol{v}_{c}\right)}{\sum_{i \in \mathcal{V}} \exp \left(\boldsymbol{u}_{i}^{\top} \boldsymbol{v}_{c}\right)}</script><p>这样上述$P(“the”∣“loves”)⋅<em>P(“man”∣“loves”)⋅</em>P(“his”∣“loves”)⋅*P(“son”∣“loves”))$的联合概率为：</p>
<script type="math/tex; mode=display">
\prod_{t=1}^{T} \prod_{-m \leq j \leq m, j=0} P\left(w^{(t+j)} \mid w^{(t)}\right)</script><p>学习过概率论或者相关科目的应该知道，上述公式我们需要进一步转化成可加的公式以便进行参数的更新，在这里就是加log :</p>
<script type="math/tex; mode=display">
-\sum_{t=1}^{T} \sum_{-m \leq j \leq m, j=0} \log P\left(w^{(t+j)} \mid w^{(t)}\right)</script><p>1）对数似然变换，因为对数是单调递增，不会影响原函数的单调性；</p>
<p>2）添加负号“-”，会使得原函数的单调性对调。</p>
<p>我们的目标就是（将概率最大化），也就是最小化该公式，(一个背景词）目标函数具体可以表示为：</p>
<script type="math/tex; mode=display">
\log P\left(w_{o} \mid w_{c}\right)=\boldsymbol{u}_{o}^{\top} \boldsymbol{v}_{c}-\log \left(\sum_{i \in \mathcal{V}} \exp \left(\boldsymbol{u}_{i}^{\top} \boldsymbol{v}_{c}\right)\right)</script><p>梯度下降法更新：</p>
<script type="math/tex; mode=display">
\begin{aligned}
\frac{\partial \log P\left(w_{o} \mid w_{c}\right)}{\partial v_{c}} &=\boldsymbol{u}_{o}-\frac{\sum_{j \in \mathcal{V}} \exp \left(\boldsymbol{u}_{j}^{\top} \boldsymbol{v}_{c}\right) \boldsymbol{u}_{j}}{\sum_{i \in \mathcal{V}} \exp \left(\boldsymbol{u}_{i}^{\top} \boldsymbol{v}_{c}\right)} \\
&=\boldsymbol{u}_{o}-\sum_{j \in \mathcal{V}}\left(\frac{\exp \left(\boldsymbol{u}_{j}^{\top} \boldsymbol{v}_{c}\right)}{\sum_{i \in \mathcal{V}} \exp \left(\boldsymbol{u}_{i}^{\top} \boldsymbol{v}_{c}\right)}\right) \boldsymbol{u}_{j} \\
&=\boldsymbol{u}_{o}-\sum_{j \in \mathcal{V}} P\left(w_{j} \mid w_{c}\right) \boldsymbol{u}_{j}
\end{aligned}</script><h3 id="3-4-步骤总结"><a href="#3-4-步骤总结" class="headerlink" title="3.4 步骤总结"></a>3.4 步骤总结</h3><p><img src="https://gitee.com/moluggg/image/raw/master/img/202008/04/121113-105249.png" alt="在这里插入图片描述"></p>
<p><img src="https://gitee.com/moluggg/image/raw/master/img/202008/04/120928-894916.png" alt="image-20200804120927843"></p>
<p><img src="https://gitee.com/moluggg/image/raw/master/img/202008/04/120953-254943.png" alt="image-20200804120952802"></p>
<p>摘录于：<a target="_blank" rel="noopener" href="https://blog.csdn.net/weixin_41843918/article/details/90312339">https://blog.csdn.net/weixin_41843918/article/details/90312339</a></p>
<p>:100: Deepwalk更新的是哪一个参数？w和w’都更新吗？是的吧</p>
<h2 id="4-直觉上的理解"><a href="#4-直觉上的理解" class="headerlink" title="4. 直觉上的理解"></a>4. 直觉上的理解</h2><p>下面我们将通过直觉来进行一些思考。</p>
<p>如果两个不同的单词有着非常相似的“上下文”（也就是窗口单词很相似，比如“Kitty climbed the tree”和“Cat climbed the tree”），那么通过我们的模型训练，这两个单词的嵌入向量将非常相似。</p>
<p>那么两个单词拥有相似的“上下文”到底是什么含义呢？比如对于同义词“intelligent”和“smart”，我们觉得这两个单词应该拥有相同的“上下文”。而例如”engine“和”transmission“这样相关的词语，可能也拥有着相似的上下文。</p>
<p>实际上，这种方法实际上也可以帮助你进行词干化（stemming），例如，神经网络对”ant“和”ants”两个单词会习得相似的词向量。</p>
<blockquote>
<p>词干化（stemming）就是去除词缀得到词根的过程。</p>
</blockquote>
<h2 id="5-python实现"><a href="#5-python实现" class="headerlink" title="5.python实现"></a>5.python实现</h2><p><a target="_blank" rel="noopener" href="https://zhuanlan.zhihu.com/p/29668368">https://zhuanlan.zhihu.com/p/29668368</a></p>
<pre><code class="lang-python">import numpy as np
import random

def softmax(x):
    orig_shape = x.shape

    # 根据输入类型是矩阵还是向量分别计算softmax
    if len(x.shape) &gt; 1:
        # 矩阵
        tmp = np.max(x,axis=1) # 得到每行的最大值，用于缩放每行的元素，避免溢出
        x-=tmp.reshape((x.shape[0],1)) # 使每行减去所在行的最大值（广播运算）

        x = np.exp(x) # 第一步，计算所有值以e为底的x次幂
        tmp = np.sum(x, axis = 1) # 将每行求和并保存
        x /= tmp.reshape((x.shape[0], 1)) # 所有元素除以所在行的元素和（广播运算）

    else:
        # 向量
        tmp = np.max(x) # 得到最大值
        x -= tmp # 利用最大值缩放数据
        x = np.exp(x) # 对所有元素求以e为底的x次幂
        tmp = np.sum(x) # 求元素和
        x /= tmp # 求somftmax
    return x

def sigmoid(x):
    s = np.true_divide(1, 1 + np.exp(-x)) # 使用np.true_divide进行加法运算
    return s


def sigmoid_grad(s):
    ds = s * (1 - s) # 可以证明：sigmoid函数关于输入x的导数等于`sigmoid(x)(1-sigmoid(x))`
    return ds

def softmaxCostAndGradient(predicted, target, outputVectors):
    v_hat = predicted # 中心词向量
    z = np.dot(outputVectors, v_hat) # 预测得分
    y_hat = softmax(z) # 预测输出y_hat

    cost = -np.log(y_hat[target]) # 计算代价

    z = y_hat.copy()
    z[target] -= 1.0
    grad = np.outer(z, v_hat) # 计算中心词的梯度
    gradPred = np.dot(outputVectors.T, z) # 计算输出词向量矩阵的梯度

    return cost, gradPred, grad

def skipgram(currentWord, contextWords, tokens, inputVectors, outputVectors):
    # 初始化变量
    cost = 0.0
    gradIn = np.zeros(inputVectors.shape)
    gradOut = np.zeros(outputVectors.shape)

    cword_idx = tokens[currentWord] # 得到中心单词的索引
    v_hat = inputVectors[cword_idx] # 得到中心单词的词向量

    # 循环预测上下文中每个字母
    for j in contextWords:
        u_idx = tokens[j] # 得到目标字母的索引
        c_cost, c_grad_in, c_grad_out = softmaxCostAndGradient(v_hat, u_idx, outputVectors) #计算一个中心字母预测一个上下文字母的情况
        cost += c_cost # 所有代价求和
        gradIn[cword_idx] += c_grad_in # 中心词向量梯度求和
        gradOut += c_grad_out # 输出词向量矩阵梯度求和

    return cost, gradIn, gradOut

inputVectors = np.random.randn(5, 3) # 输入矩阵，语料库中字母的数量是5，我们使用3维向量表示一个字母
outputVectors = np.random.randn(5, 3) # 输出矩阵

sentence = [&#39;a&#39;, &#39;e&#39;, &#39;d&#39;, &#39;b&#39;, &#39;d&#39;, &#39;c&#39;,&#39;d&#39;, &#39;e&#39;, &#39;e&#39;, &#39;c&#39;, &#39;a&#39;] # 句子
centerword = &#39;c&#39; # 中心字母
context = [&#39;a&#39;, &#39;e&#39;, &#39;d&#39;, &#39;d&#39;, &#39;d&#39;, &#39;d&#39;, &#39;e&#39;, &#39;e&#39;, &#39;c&#39;, &#39;a&#39;] # 上下文字母
tokens = dict([(&quot;a&quot;, 0), (&quot;b&quot;, 1), (&quot;c&quot;, 2), (&quot;d&quot;, 3), (&quot;e&quot;, 4)]) # 用于映射字母在输入输出矩阵中的索引

c, gin, gout = skipgram(centerword, context, tokens, inputVectors, outputVectors)
step = 0.01 #更新步进
print(&#39;原始输入矩阵:\n&#39;,inputVectors)
print(&#39;原始输出矩阵:\n&#39;,outputVectors)
inputVectors -= step * gin # 更行输入词向量矩阵
outputVectors -= step * gout
print(&#39;更新后的输入矩阵:\n&#39;,inputVectors)
print(&#39;更新后的输出矩阵:\n&#39;,outputVectors)
</code></pre>
<h1 id="node2vec"><a href="#node2vec" class="headerlink" title="node2vec"></a>node2vec</h1><p>\alpha \Omega(\omega)</p>
<p>可以说是deepwalk的改进</p>
<h2 id="采样策略"><a href="#采样策略" class="headerlink" title="采样策略"></a>采样策略</h2><p>Deepwalk游走的方式是：</p>
<p><img src="https://gitee.com/moluggg/image/raw/master/img/202008/05/100753-131713.png" alt="image-20200805100752132"></p>
<p>从15开始，随机选择与他相连的点，然后再随机选择，这样产生一个节点连接序列，这样作为信息进行训练。</p>
<p>现在node2vec 改进DeepWalk中随机游走的方式，使它综合DFS和BFS的特性</p>
<p>如图所示：</p>
<p><img src="https://gitee.com/moluggg/image/raw/master/img/202008/05/101105-913820.jpeg" alt="img"></p>
<p>现在，嗯已经采样了（…..,t,v)这样一个序列，现在我们要继续采样充实序列。给出了下一步的去向的计算公式：</p>
<script type="math/tex; mode=display">
\alpha_{p q}(t, x)=\left\{\begin{array}{ll}
\frac{1}{p} & \text { if } d_{t x}=0 \\
1 & \text { if } d_{t x}=1 \\
\frac{1}{q} & \text { if } d_{t x}=2
\end{array}\right.</script><p>这里的p,q是参数需要人为调节的，怎么调节就要明白以下原则：</p>
<ul>
<li>如果t与x相等，那么采样x的概率为 <img src="https://www.zhihu.com/equation?tex=%5Cfrac%7B1%7D%7Bp%7D" alt="[公式]"> ；</li>
<li>如果t与x相连，那么采样x的概率1；</li>
<li>如果t与x不相连，那么采样x概率为 <img src="E:\typora图片\equation-1596593678886.svg" alt="[公式]"> 。</li>
</ul>
<p>参数p、q的意义分别如下：</p>
<p>返回概率p：</p>
<ul>
<li>如果 <img src="https://www.zhihu.com/equation?tex=p%3Emax%28q%2C1%29" alt="[公式]"> ，那么采样会尽量不往回走，对应上图的情况，就是下一个节点不太可能是上一个访问的节点t。</li>
<li>如果 <img src="https://www.zhihu.com/equation?tex=p%3Cmin%28q%2C1%29" alt="[公式]"> ，那么采样会更倾向于返回上一个节点，这样就会一直在起始点周围某些节点来回转来转去。</li>
</ul>
<p>出入参数q：</p>
<ul>
<li>如果 <img src="https://www.zhihu.com/equation?tex=q%3E1" alt="[公式]"> ，那么游走会倾向于在起始点周围的节点之间跑，可以反映出一个节点的BFS特性。</li>
<li>如果 <img src="https://www.zhihu.com/equation?tex=q%3C1" alt="[公式]"> ，那么游走会倾向于往远处跑，反映出DFS特性。</li>
</ul>
<p><strong>当p=1，q=1时，游走方式就等同于DeepWalk中的随机游走。</strong></p>
<h2 id="优化目标："><a href="#优化目标：" class="headerlink" title="优化目标："></a>优化目标：</h2><p>我们优化的目标就是将顶点的近邻结点出现的概率最大。这样构造一个损失函数，其实跟DeepWalk也是一样的，只不过换了种表达而已。</p>
<p><img src="https://www.zhihu.com/equation?tex=%5Cmax+%5Climits_%7Bf%7D+%5Csum_%7Bu%E2%88%88V%7DlogPr%28N_s%28u%29%7Cf%28u%29%29" alt="[公式]"></p>
<p>其中 <img src="E:\typora图片\equation-1596593875809.svg" alt="[公式]"> 就是当前节点， <img src="E:\typora图片\equation-1596593875816.svg" alt="[公式]"> 就是邻居节点（以s的方法采样得到的），为了让这个结果更容易计算，引入了两个假设，其实这都是skip-gram模型中的。</p>
<p><strong>第一个假设是条件独立（Conditional independence）</strong>，即采样每个邻居是相互独立的，所以如果要计算采样所有邻居的概率只需要将采样每个邻居的概率相乘就行了，公式化表达就是：</p>
<p><img src="https://www.zhihu.com/equation?tex=Pr%28N_s%28u%29%7Cf%28u%29%29%3D%5Cprod_%7Bn_i%E2%88%88N_s%28u%29%7DPr%28n_i%7Cf%28u%29%29" alt="[公式]"></p>
<p><strong>第二个假设是特征空间的对称性（Symmetry in feature space）</strong>，其实也很好理解，比如一条边连接了a和b，那么映射到特征空间时，a对b的影响和b对a的影响应该是一样的。用一个模型来表示一个（节点，邻居）对：</p>
<p><img src="https://www.zhihu.com/equation?tex=Pr%28n_i%7Cf%28u%29%29+%3D+%5Cfrac%7Bexp%28f%28n_i%29%C2%B7f%28u%29%29%7D%7B%5Csum_%7Bv%E2%88%88V%7Dexp%28f%28v%29%C2%B7f%28u%29%29%7D" alt="[公式]"></p>
<p>将上面三个公式结合起来得到<strong>最终要优化的损失函数为</strong>：</p>
<p><img src="https://www.zhihu.com/equation?tex=%5Cmax+%5Climits_%7Bf%7D+%5Csum_%7Bu%E2%88%88V%7D%5B-logZ_u+%2B+%5Csum_%7Bn_i%E2%88%88N_s%28u%29%7Df%28n_i%29%C2%B7f%28u%29%5D" alt="[公式]"></p>
<p>注意两点：</p>
<ol>
<li>$Z_u$ 直接计算特别费时，本文用Negative Sampling方法解决的。</li>
<li>$N_s{(u)}$未必是u的直接邻居，只是用s方法采样得到的邻居，跟具体的采样方法有关。</li>
</ol>
<p>到这里之前这些公式基本都是NLP中处理词向量那块的，现在让我们把目光放到node2vec中的创新内容。</p>

      
       <hr><span style="font-style: italic;color: gray;"> 转载请注明来源，欢迎对文章中的引用来源进行考证，欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论，也可以邮件至 2572876783@qq.com </span>
    </div>
</article>


<p>
    <a  class="dashang" onclick="dashangToggle()">💰</a>
</p>






    
        <!-- MathJax配置，可通过单美元符号书写行内公式等 -->
<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
    "HTML-CSS": {
        preferredFont: "TeX",
        availableFonts: ["STIX","TeX"],
        linebreaks: { automatic:true },
        EqnChunk: (MathJax.Hub.Browser.isMobile ? 10 : 50)
    },
    tex2jax: {
        inlineMath: [ ["$", "$"], ["\\(","\\)"] ],
        processEscapes: true,
        ignoreClass: "tex2jax_ignore|dno",
        skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
    },
    TeX: {
        equationNumbers: { autoNumber: "AMS" },
        noUndefined: { attributes: { mathcolor: "red", mathbackground: "#FFEEEE", mathsize: "90%" } },
        Macros: { href: "{}" }
    },
    messageStyle: "none"
    });
</script>
<!-- 给MathJax元素添加has-jax class -->
<script type="text/x-mathjax-config">
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax(), i;
        for(i=0; i < all.length; i += 1) {
            all[i].SourceElement().parentNode.className += ' has-jax';
        }
    });
</script>
<!-- 通过连接CDN加载MathJax的js代码 -->
<script type="text/javascript" async
        src="//cdn.jsdelivr.net/npm/mathjax@2.7.8/unpacked/MathJax.js?config=TeX-MML-AM_CHTML">
</script>
<input type="hidden" id="MathJax-js"
        value="//cdn.jsdelivr.net/npm/mathjax@2.7.8/unpacked/MathJax.js?config=TeX-MML-AM_CHTML">
</input>
    




    </div>
    <div class="copyright">
        <p class="footer-entry">
    ©2016-2020 MOLU
</p>
<p class="footer-entry">Built with <a href="https://hexo.io/" target="_blank">Hexo</a> and <a href="https://github.com/yelog/hexo-theme-3-hexo" target="_blank">3-hexo</a> theme</p>

    </div>
    <div class="full-toc">
        <button class="full" data-title="切换全屏 快捷键 s"><span class="min "></span></button>
<a class="" id="rocket" ></a>

    </div>
</div>

<div class="hide_box" onclick="dashangToggle()"></div>
<div class="shang_box">
    <a class="shang_close"  onclick="dashangToggle()">×</a>
    <div class="shang_tit">
        <p>Help us with donation</p>
    </div>
    <div class="shang_payimg">
        <div class="pay_img">
            <img src="/img/alipay.jpg" class="alipay" title="扫码支持">
            <img src="/img/weixin.jpg" class="weixin" title="扫码支持">
        </div>
    </div>
    <div class="shang_payselect">
        <span><label><input type="radio" name="pay" checked value="alipay">alipay</label></span><span><label><input type="radio" name="pay" value="weixin">weixin</label></span>
    </div>
</div>


</body>
<script src="/js/jquery.pjax.js?v=1.1.0" ></script>

<script src="/js/script.js?v=1.1.0" ></script>
<script>
    var img_resize = 'default';
    function initArticle() {
        /*渲染对应的表格样式*/
        
            $("#post .pjax table").addClass("green_title");
        

        /*渲染打赏样式*/
        
        $("input[name=pay]").on("click", function () {
            if($("input[name=pay]:checked").val()=="weixin"){
                $(".shang_box .shang_payimg .pay_img").addClass("weixin_img");
            } else {
                $(".shang_box .shang_payimg .pay_img").removeClass("weixin_img");
            }
        })
        

        /*高亮代码块行号*/
        

        /*访问数量*/
        
        $.getScript("//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js");
        

        /*代码高亮，行号对齐*/
        $('.pre-numbering').css('line-height',$('.has-numbering').css('line-height'));

        
        
    }

    /*打赏页面隐藏与展示*/
    
    function dashangToggle() {
        $(".shang_box").fadeToggle();
        $(".hide_box").fadeToggle();
    }
    

</script>

<!--加入行号的高亮代码块样式-->

<!--自定义样式设置-->
<style>
    
    
    .nav {
        width: 542px;
    }
    .nav.fullscreen {
        margin-left: -542px;
    }
    .nav-left {
        width: 120px;
    }
    
    
    @media screen and (max-width: 1468px) {
        .nav {
            width: 492px;
        }
        .nav.fullscreen {
            margin-left: -492px;
        }
        .nav-left {
            width: 100px;
        }
    }
    
    
    @media screen and (max-width: 1024px) {
        .nav {
            width: 492px;
            margin-left: -492px
        }
        .nav.fullscreen {
            margin-left: 0;
        }
    }
    
    @media screen and (max-width: 426px) {
        .nav {
            width: 100%;
        }
        .nav-left {
            width: 100%;
        }
    }
    
    
    .nav-right .title-list nav a .post-title, .nav-right .title-list #local-search-result a .post-title {
        color: #383636;
    }
    
    
    .nav-right .title-list nav a .post-date, .nav-right .title-list #local-search-result a .post-date {
        color: #5e5e5f;
    }
    
    
    .nav-right nav a.hover, #local-search-result a.hover{
        background-color: #e2e0e0;
    }
    
    

    /*列表样式*/
    

    /* 背景图样式 */
    
    


    /*引用块样式*/
    

    /*文章列表背景图*/
    

    
</style>







</html>
